package com.hmall.api.config;

import com.hmall.api.fallback.ItemClientFallbackFactory;
import com.hmall.common.utils.UserContext;
import feign.Logger;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.context.annotation.Bean;

import java.util.Optional;

/**
 * @author chanchaw
 * @create 2025-08-02 12:45
 */
public class DefaultFeignConfig {
    @Bean
    public Logger.Level feignLogLevel(){
        return Logger.Level.FULL;
    }
    // 制作 OpenFeign 的请求拦截器，写入用户信息
    // 保证微服务之间的调用也能拿到发出请求的用户身份
    // - 前面做的在网关中设置向请求头添加用户信息
    //   在微服务之间调用API时无效，无法获取用户信息
    @Bean
    public RequestInterceptor userInfoRequestInterceptor(){
        return new RequestInterceptor() {
            @Override
            public void apply(RequestTemplate requestTemplate) {
                Long userId = Optional.ofNullable(UserContext.getUser()).orElse(0L);
                requestTemplate.header("user-info", userId.toString());
            }
        };
    }
    @Bean
    public ItemClientFallbackFactory itemClientFallbackFactory(){
        return new ItemClientFallbackFactory();
    }
}
